Passa al contenuto principale
Versione: 2025-26

Sezione .data

Un programma assembler è tipicamente diviso in sezione .data, dove vengono allocato spazio in memoria a disposizione del programma, e sezione .text, dove viene indicata la sequenza di istruzione che compone il programma.

La sezione data è tipicamente composta da una serie di dichiarazioni nella forma nomeVariabile: .tipo <parametri di inizializzazione>. Alcuni esempi:

.data
var1: .long 5
var2: .byte 0x2d, 0x01
str: .asciz "Una stringa"

Ciascuna direttiva non fa che allocare uno o più blocchi di memoria contigui della dimensione richiesta e con il contenuto iniziale richiesto.

Ciascuna label non è che un indirizzo al primo byte di tale blocco contiguo di memoria. Dato che l'architettura x86 è little-endian, tale primo byte sarà il meno significativo.

Direttive di allocazione

TipoNotazioneDescrizione
byte.byte V1 [, V2...]Alloca uno o più byte, inizializzati con i valori forniti.
word.word V1 [, V2...]Alloca uno o più word (2 byte), inizializzati con i valori forniti.
long.long V1 [, V2...]Alloca uno o più long (4 byte), inizializzati con i valori forniti.
fill.fill n, l, vAlloca n locazioni di l byte ciascuno e inizializzati a v. l e v si possono omettere, di default sono 1 e 0.
ascii.ascii "str"Alloca la stringa str, 1 byte per carattere.
asciz.asciz "str"Alloca la stringa str, 1 byte per carattere, aggiungendo un byte 0x00 in fondo.

L'assemblatore supporta anche altre direttive e usi più complessi. Per maggiori informazioni, la documentazione ufficiale è qui.

Valori letterali

Il contenuto di ciascuna allocazione è definito tramite valori letterali, che devono essere costanti note o derivabili a tempo di compilazione.

TipoEsempioDescrizione
Decimale.byte 2Costante in notazione decimale.
Esadecimale.byte 0x0dCostante in notazione esadecimale.
Binario.byte 0b00001101Costante in notazione binaria.
ASCII.byte 'a', '\r'Costante in notazione ASCII, il carattere viene tradotto nel byte corrispondente.
label.long val0Indirizzo corrispondente a un'altra label.
label e offset.long val0+1Indirizzo corrispondente a un'altra label, più offset. La scala è sempre 1.
Attenzione alle dimensioni

I valori letterali vengono automaticamente troncati o estesi per rientrare nelle dimensioni specificate dalla direttiva.

.data
b1: .byte 0x0d0e # viene troncato a 0x0e
w1: .word 0x0d # viene esteso a 0x000d
w2: .word 0xf1 # viene esteso a 0x00f1